/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador.Service.Ventas;

import Controlador.Bean.Log.Log;
import Controlador.Bean.Ventas.ProdBusqueda;
import Controlador.Bean.Ventas.Cotizacion;
import Controlador.Bean.Ventas.LineaCotizacion;
import Controlador.Bean.Ventas.CotizacionBusqueda;
import Data.config.SessionFac;
import gui.General.Main;
import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import java.util.Date;

/**
 *
 * @author Luis Enrique
 */
public class ServicioCotizacion {
     
    java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    Date fecha= new Date();
    String f=sdf.format(fecha);
    
    private ServicioCotizacion() {};
    
    static private ServicioCotizacion servicioCotizcion=null; 
		   
    public static ServicioCotizacion getInstance(){    
        if(servicioCotizcion==null) servicioCotizcion= new ServicioCotizacion();
        return servicioCotizcion;
    }   
      
    //INICIO COTIZACION
    public String getCodCotizacion(){
        String codigo;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            codigo = sqlsesion.selectOne("Data.Ventas.ServicioCotizacion.getCodCotizacion");			
            sqlsesion.close();
        }
        if(codigo!=null){
            int cod= Integer.parseInt(codigo.substring(3))+1;
            String defecto= "000000";
            String temp= defecto.substring(0, defecto.length()-String.valueOf(cod).length()).concat(String.valueOf(cod));
            return codigo.substring(0,3).concat(temp);
        }
        else
             return ("COT000001");
    }
    
    public int getCorrelativoCotizacion(){
        Integer correlativo;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            correlativo = (Integer)sqlsesion.selectOne("Data.Ventas.ServicioCotizacion.getCorrelativo");			
            sqlsesion.close();
        }
        if(correlativo!=null)
            return correlativo+1;
        else
            return (1);
    }

    public synchronized void registrarCotizacion(Cotizacion cotizacion){
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            sqlsesion.insert("Data.Ventas.ServicioCotizacion.insertCotizacion",cotizacion);
            sqlsesion.commit();
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTCOTZC","Registrar Cotización",f);
        }
    }
    
    public ArrayList<CotizacionBusqueda> seleccionarAllCotizaciones(){
        ArrayList<CotizacionBusqueda> cotizaciones;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            List<CotizacionBusqueda> temp = (List)sqlsesion.selectList("Data.Ventas.ServicioCotizacion.getAllCotizaciones");			
            cotizaciones = new ArrayList(temp);
            sqlsesion.close();
            //Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTCOTZC","Seleccionar Cotizaciones",f);
        }
        return cotizaciones;
    }
    
    public ArrayList<CotizacionBusqueda> seleccionarCotizaciones (CotizacionBusqueda cotizacionBusqueda){
        ArrayList<CotizacionBusqueda> cotizaciones;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            List<CotizacionBusqueda> temp = (List)sqlsesion.selectList("Data.Ventas.ServicioCotizacion.getCotizaciones",cotizacionBusqueda);			
            cotizaciones = new ArrayList(temp);
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTCOTZC","Seleccionar Cotizaciones",f);
        }
        return cotizaciones;
    }
    
    public void eliminarCotizacion (String codigo){
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            sqlsesion.update("Data.Ventas.ServicioCotizacion.deleteCotizacion",codigo);
            sqlsesion.commit();
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTCOTZC","Anular Cotización",f);
        }
    }
    
    public void actualizarCotizacionReg (String codigo){
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            sqlsesion.update("Data.Ventas.ServicioCotizacion.actualizarCotizacionReg",codigo);
            sqlsesion.commit();
            sqlsesion.close();
        }
    }
    
    public void actualizarCotizacionPed (String codigo){
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            sqlsesion.update("Data.Ventas.ServicioCotizacion.actualizarCotizacionPed",codigo);
            sqlsesion.commit();
            sqlsesion.close();
        }
    }
    
    public void actualizarCotizacionFac (String codigo){
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            sqlsesion.update("Data.Ventas.ServicioCotizacion.actualizarCotizacionFac",codigo);
            sqlsesion.commit();
            sqlsesion.close();
        }
    }
    
    public void actualizarCotizacionesVencidas (Date fecha){
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            sqlsesion.update("Data.Ventas.ServicioCotizacion.updateCotizacionesVencidas",fecha);
            sqlsesion.commit();
            sqlsesion.close();
        }
    }
    //FIN COTIZACION
    
    //INICIO LINEA COTIZACION
    public synchronized void registrarLineaCotizacion(ArrayList<LineaCotizacion> lineas,String codigo){
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            for(int i=0;i<lineas.size();i++){
                lineas.get(i).setIdCotizacion(codigo);
                sqlsesion.insert("Data.Ventas.ServicioCotizacion.insertLineaCotizacion",lineas.get(i));
            }        
            sqlsesion.commit();
            sqlsesion.close();
        }
    }
           
    public ArrayList<ProdBusqueda> getProductosBusqueda(ProdBusqueda prodBusqueda){
        ArrayList<ProdBusqueda> productos;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            List<ProdBusqueda> temp= (List)sqlsesion.selectList("Data.Ventas.ServicioCotizacion.getProdBusqueda",prodBusqueda);			
            productos= new ArrayList(temp);
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTCOTZC","Seleccionar Productos",f);
        }
        return productos;
    }
    
    public ArrayList<LineaCotizacion> seleccionarLineasCotizacion (String codigo){
        ArrayList<LineaCotizacion> lineas;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            List<LineaCotizacion> temp = (List)sqlsesion.selectList("Data.Ventas.ServicioCotizacion.getLineasCotizacion",codigo);			
            lineas = new ArrayList(temp);
            sqlsesion.close();
        }
        return lineas;
    }    
    //FIN LINEA COTIZACION
}
